-- =========================================================
-- SCRIPT DE MIGRATION - MISE À JOUR BASE DE DONNÉES CLIENT
-- Date: 13 Décembre 2025
-- =========================================================
-- IMPORTANT: Ce script met à jour la structure de la base de données
-- sans supprimer les données existantes
-- =========================================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

-- =========================================================
-- 1. MODIFICATION TABLE: bons_livraison
-- Ajout: commentaire_paiement (pour justifier les divergences de paiement)
-- =========================================================

ALTER TABLE `bons_livraison` 
ADD COLUMN `commentaire_paiement` TEXT NULL AFTER `montant_verse`;

-- =========================================================
-- 2. MODIFICATION TABLE: planning
-- Ajout: statut (pour gérer archivage automatique)
-- =========================================================

ALTER TABLE `planning` 
ADD COLUMN `statut` ENUM('actif','archive') DEFAULT 'actif' AFTER `date_fin`;

-- Initialiser tous les plannings existants comme 'actif'
UPDATE `planning` SET `statut` = 'actif' WHERE `statut` IS NULL;

-- =========================================================
-- 3. MODIFICATION TABLE: utilisateurs
-- Modification: role (ajout des nouveaux rôles assistante_commande et assistante_livraison)
-- =========================================================

-- Étape 3.1: Modifier la colonne 'role' pour inclure les nouveaux rôles
ALTER TABLE `utilisateurs` 
MODIFY COLUMN `role` ENUM('admin_principal','admin_second','assistante','assistante_commande','assistante_livraison') 
NOT NULL DEFAULT 'assistante_livraison';

-- Étape 3.2: Migrer les anciennes 'assistante' vers 'assistante_livraison'
UPDATE `utilisateurs` 
SET `role` = 'assistante_livraison' 
WHERE `role` = 'assistante';

-- Étape 3.3: Retirer l'ancienne valeur 'assistante' de l'ENUM
ALTER TABLE `utilisateurs` 
MODIFY COLUMN `role` ENUM('admin_principal','admin_second','assistante_commande','assistante_livraison') 
NOT NULL DEFAULT 'assistante_livraison';

-- Étape 3.4: Modifier la colonne 'role_temporaire' pour inclure les nouveaux rôles
ALTER TABLE `utilisateurs` 
MODIFY COLUMN `role_temporaire` ENUM('admin_principal','admin_second','assistante','assistante_commande','assistante_livraison') 
DEFAULT NULL;

-- Étape 3.5: Migrer les anciennes 'assistante' temporaires vers 'assistante_livraison'
UPDATE `utilisateurs` 
SET `role_temporaire` = 'assistante_livraison' 
WHERE `role_temporaire` = 'assistante';

-- Étape 3.6: Retirer l'ancienne valeur 'assistante' de l'ENUM temporaire
ALTER TABLE `utilisateurs` 
MODIFY COLUMN `role_temporaire` ENUM('admin_principal','admin_second','assistante_commande','assistante_livraison') 
DEFAULT NULL;

-- =========================================================
-- 4. CRÉATION TABLE: details_planning
-- Nouvelle table pour gérer les produits dans les plannings
-- =========================================================

CREATE TABLE IF NOT EXISTS `details_planning` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `planning_id` int(11) NOT NULL,
  `produit_id` int(11) NOT NULL,
  `quantite_prevue` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `planning_id` (`planning_id`),
  KEY `produit_id` (`produit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Ajouter les contraintes de clés étrangères pour details_planning
ALTER TABLE `details_planning`
ADD CONSTRAINT `details_planning_ibfk_1` FOREIGN KEY (`planning_id`) REFERENCES `planning` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `details_planning_ibfk_2` FOREIGN KEY (`produit_id`) REFERENCES `produits` (`id`) ON DELETE RESTRICT;

-- =========================================================
-- VÉRIFICATION FINALE
-- =========================================================

-- Afficher un message de succès
SELECT 'Migration terminée avec succès !' AS Statut;

-- Vérifier les modifications sur bons_livraison
SELECT 'Vérification: bons_livraison' AS Table_Name;
SHOW COLUMNS FROM `bons_livraison` LIKE 'commentaire_paiement';

-- Vérifier les modifications sur planning
SELECT 'Vérification: planning' AS Table_Name;
SHOW COLUMNS FROM `planning` LIKE 'statut';

-- Vérifier les modifications sur utilisateurs
SELECT 'Vérification: utilisateurs (role)' AS Table_Name;
SHOW COLUMNS FROM `utilisateurs` LIKE 'role';

-- Vérifier la création de details_planning
SELECT 'Vérification: details_planning' AS Table_Name;
SHOW TABLES LIKE 'details_planning';

-- Afficher le nombre total d'enregistrements dans chaque table (pour vérifier l'intégrité)
SELECT 'Résumé des données' AS Info;
SELECT 
    'bons_commande' AS Table_Name, 
    COUNT(*) AS Nb_Lignes 
FROM bons_commande
UNION ALL
SELECT 
    'bons_livraison', 
    COUNT(*) 
FROM bons_livraison
UNION ALL
SELECT 
    'utilisateurs', 
    COUNT(*) 
FROM utilisateurs
UNION ALL
SELECT 
    'planning', 
    COUNT(*) 
FROM planning
UNION ALL
SELECT 
    'details_planning', 
    COUNT(*) 
FROM details_planning;

COMMIT;

-- =========================================================
-- FIN DE LA MIGRATION
-- =========================================================
-- NOTES IMPORTANTES:
-- 1. Sauvegarder la base de données AVANT d'exécuter ce script
-- 2. Tester sur une copie de la base avant d'appliquer en production
-- 3. Vérifier les résultats des requêtes de vérification
-- 4. Les données existantes sont PRÉSERVÉES
-- =========================================================






CREATE TABLE IF NOT EXISTS `point_jour` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_point` date NOT NULL,
  `livreur_id` int(11) NOT NULL,
  `argent_encaisse` decimal(10,2) NOT NULL DEFAULT 0.00,
  `depenses` decimal(10,2) NOT NULL DEFAULT 0.00,
  `commentaire_depenses` text DEFAULT NULL,
  `saisi_par_user_id` int(11) NOT NULL,
  `date_saisie` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `date_point` (`date_point`),
  KEY `livreur_id` (`livreur_id`),
  KEY `saisi_par_user_id` (`saisi_par_user_id`),
  CONSTRAINT `fk_point_jour_livreur` FOREIGN KEY (`livreur_id`) REFERENCES `livreurs` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_point_jour_user` FOREIGN KEY (`saisi_par_user_id`) REFERENCES `utilisateurs` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;